package com.jason.library.delegate

import com.jason.library.delegate.property.Test

//https://mp.weixin.qq.com/s/ndgbta94As02vMktNePBAg

object DelegateMain {

    @JvmStatic
    fun main(args: Array<String>) {
        delegateClass();
        delegateProperty()
        delegateProperty2()


    }

}

/**
 * 委托，也就是委托模式，它是 23 种经典设计模式种的一种，又名代理模式
 */
fun delegateClass() {
    println("kotlin委托--- Java的代理模式");
    val player = RealGamePlayer("jason");
    val delegate = GamePlayerDelegate(player);
    delegate.rank()
    delegate.upgrade()
}

/**
 * 属性委托
 */
fun delegateProperty() {
    println("kotlin属性委托");
    println(Test().pro)
    Test().pro = "Hello, Android技术杂货铺！";
}

fun delegateProperty2() {
    println("kotlin属性委托--另一种实现属性委托的方式")
    println(Test().d1)
    println(Test().d2)
    Test().d2 = 30
    println(Test().d2)
}